home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / GRAPHICS / GMSMTH01.ZIP / INCLUDE / XMEM.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-13  |  2.4 KB  |  92 lines

  1. /*
  2.  
  3.     xmem.h
  4.  
  5.     Internet: alexad3@icebox.iceonline.com
  6.     Copyright 1995, October 12 by Alec Russell, ALL rights reserved
  7.  
  8.     Created - 1993 or 1994 ?
  9.  
  10.     History:
  11.         New file
  12.  
  13. */
  14.  
  15.  
  16. #if !defined(_XMEM_H)
  17. #define _XMEM_H
  18.  
  19. typedef struct xms_node
  20.    {
  21.    long start, size, off;
  22.    short used;
  23.    struct xms_node *next;
  24.    }
  25. xms_node_t;
  26.  
  27. typedef struct
  28.    {
  29.    int handle;
  30.    unsigned long total;
  31.    unsigned long avail;
  32.    unsigned long next_off;
  33.    xms_node_t *next;
  34.    }
  35. xms_head_t;
  36.  
  37. #define XMSBLOCK 16384u
  38. #define XMSBLOCKSHIFT 14
  39.  
  40. extern void LSHL( unsigned long far *SHLnumber, unsigned short n );
  41.  
  42. extern unsigned short XMS_available( void );
  43.  
  44. extern unsigned short XMSblk_available( void );
  45.  
  46. extern short XMS_alloc(unsigned short rsrvd,
  47.                        unsigned short far *size
  48.                       );
  49.  
  50. extern short XMS_dealloc(unsigned short Hdl );
  51.  
  52. extern short XMStoMem(unsigned short Handle,   // XMS handle returned by XMS_alloc()
  53.                       unsigned short blk,      // which 16k block to copy to
  54.                       unsigned short blkAdr,   // offset within 16k block
  55.                       unsigned short Bytes,    // bytes to copy
  56.                       void   far *memAdr
  57.                      );
  58.  
  59. extern short MemToXMS(unsigned short Handle,
  60.                       unsigned short blk,
  61.                       unsigned short blkAdr,
  62.                       unsigned short Bytes,
  63.                       void   far *memAdr
  64.                      );
  65.  
  66. // call these for ease
  67. short alloc_xms(unsigned short far *size);  // size in 16k blocks
  68. // NOTE size is changed to the amount block size was altered by!
  69. // normaly this is zero
  70.  
  71. short xms_to_mem(unsigned short handle, void far *p, unsigned long off, unsigned short n);
  72. short mem_to_xms(unsigned short handle, void far *p, unsigned long off, unsigned short n);
  73. void deinit_xms(void);
  74. short init_xms(unsigned short min_blocks);
  75. void qfree_xms(xms_node_t *node);
  76. xms_node_t *qalloc_xms(unsigned long size);
  77. xms_node_t *xms_open(char *file);
  78. short xms_read(void far *buffer, unsigned short n, xms_node_t *node);
  79. short xms_write(void far *buffer, unsigned short n, xms_node_t *node);
  80. long xms_tell(xms_node_t *node);
  81. short xms_seek(xms_node_t *node, long off, short whence);
  82. void xms_close(xms_node_t *node);
  83.  
  84.  
  85. extern xms_head_t xms_head;
  86.  
  87.  
  88.  
  89. #endif
  90.  
  91. /* ---------------------------------- end of file --------------------- */
  92.